11. CharRNN Solution

07 CharRNN Solution V1

表示记忆功能

你已经知道 RNN 适合序列数据,因为它们具有记忆功能。我们用隐藏状态表示这种记忆功能。

在字符级 LSTM 示例中,每个 LSTM 单元除了将字符当做输入并生成输出字符之外,还具有隐藏状态,每个单元都会将其隐藏状态传递给下个单元。

这种连接就形成了记忆功能,一系列单元能够记住它们见过的字符,并根据该信息预测下个字符。

例如,如果单元生成了字符 a,则不太可能在此字符之后又生成另一个 a

net.eval()

上述代码缺少 net.eval()

net.eval() 会将模型中的所有层级设为评估模式。这样会影响到丢弃层等层级,因为丢弃层会在训练期间按照某个概率“关闭”节点。但在测试或预测时,会“打开”所有节点。所以在测试或验证模型之前,以及在抽样和预测给定序列中的下个潜在字符之前,应该模型设为评估模式,我将仅在训练循环期间将模型设为 net.train()(训练模式)。

这一点体现在了之前的 notebook 代码和此 Github 代码库中。